package cn.com.longfuinfo.wx.controller;

import org.apache.log4j.Logger;

import com.jfinal.kit.StrKit;

import cn.com.longfuinfo.api.bean.EventMessage;
import cn.com.longfuinfo.api.bean.xmlmessage.XMLMessage;
import cn.com.longfuinfo.wx.common.FinalParam;
import cn.com.longfuinfo.wx.exception.SaveException;
import cn.com.longfuinfo.wx.exception.ServiceLocatorException;
import cn.com.longfuinfo.wx.service.WxEventControlService;

/**
 * 将微信推送过来的事件 进行分发管理
 * @author Administrator
 *
 */
public class WxEventControlManager {

	private Logger log = Logger.getLogger(this.getClass());
	private XMLMessage xmlMessage;//回复的消息
	private WxEventControlService service = new WxEventControlService();
	/**
	 * 分发 进行对微信用户不同的操作进行相应处理
	 * @param eventMessage  微信平台推送过来的用户操作事件对象
	 * @throws SaveException 
	 */
	public XMLMessage contorlEvent(EventMessage eventMessage) throws SaveException{
		
		String msg_type = eventMessage.getMsgType();//推送事件消息类型，
		System.out.println("msg_type===="+msg_type);
		log.info("其他事件========000==>"+msg_type);
		try {
			//推送事件消息类型为 event 也就是（订阅，取消订阅，或 菜单点击事件） ，其他的普通消息
			if(msg_type.equals(FinalParam.wx_msgtype_event)){
				
				String event = eventMessage.getEvent();// 得到推送事件的 类型
				log.error("得到推送事件的 类型"+event);
				if(event == null){ //事件为空，推送消息体不正确
					log.info("推送消息得不到消息的event..");
					return null;
				}
				if(event.equals(FinalParam.wx_event_subscribe)){
					
					//订阅公众号事件，调用订阅service层，逻辑处理
					log.error("用户进行订阅操作。。。 subscribe");
					String EventKey=eventMessage.getEventKey();
					log.error("用户进行订阅操作==========>"+EventKey);
					if(StrKit.notBlank(EventKey) /* && EventKey.indexOf("_")>0 */){
						xmlMessage=service.subscribes(eventMessage);
					}else{
						service.subscribe(eventMessage);
						return null;
					}
					
				}else if(event.equals(FinalParam.wx_event_unsubscribe)){
					
					//取消订阅公众号事件
					log.error("用户进行取消订阅操作。。。 unsubscribe");
					xmlMessage = service.unsubscribe(eventMessage);
					
				}else if (event.equals(FinalParam.wx_msgtype_scan)){
					log.info("微信扫码推送");
					xmlMessage=service.qrcodeScan(eventMessage);
				}
			}else{
				log.info("其他事件=====如文本===000==>");
				return null;
			}
		} catch (Exception e) {
			log.error(e.getMessage());
			throw new ServiceLocatorException(e.getMessage(), e);
		}
		return xmlMessage;
	}	
}
